/*
 * Copyright 2010 Michael Nitsche
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package de.mnit.basis.sys.datei;

import de.mnit.basis.daten.struktur.liste.S_Liste;
import de.mnit.basis.fehler.system.F_Sys_Datei;

public interface S_Ordner extends S_DS_Element {

	S_Liste<S_Ordner>   inhaltO();
	S_Liste<S_Ordner>   inhaltO(String regex);
	S_Liste<S_Datei>    inhaltD();
	S_Liste<S_Datei>    inhaltD(boolean rekursiv);
	S_Liste<S_Datei>    inhaltD(boolean rekursiv, boolean versteckte_ordner);
	S_Liste<S_Datei>    inhaltD_mitEndung(String... filter);
	S_Liste<S_Datei>    inhaltD_mitEndung(boolean rekursiv, String... filter);
	S_Liste<S_Datei>    inhaltD(String regex);
	S_Liste<S_DS_Element> inhalt();

	boolean kennt (String name);
	boolean kenntO(String name);
	boolean kenntD(String name);

	// Ordner/Datei existiert
	S_Ordner o(String name) throws F_Sys_Datei;
	S_Datei  d(String dateiname) throws F_Sys_Datei;
	S_Datei  d(String dateiname, String endung) throws F_Sys_Datei;

	// Ordner/Datei existiert noch nicht und wird neu angelegt
	S_Ordner oN(String name) throws F_Sys_Datei;
	S_Datei  dN(String dateiname) throws F_Sys_Datei;
	S_Datei  dN(String name, String endung) throws F_Sys_Datei; //TODO prüfen, ob der gleich die Datei anlegt! Darf nämlich nicht!

	// Ordner wird ggf angelegt, Datei kann existieren
	S_Ordner oF(String name) throws F_Sys_Datei;
	S_Datei  dF(String dateiname);
	S_Datei  dF(String name, String endung);

	void    sNurLesbar() throws F_Sys_Datei;

}
